home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_13_11 / phillips / amean.c < prev    next >
Text File  |  1993-10-10  |  2KB  |  86 lines

  1.  
  2.  
  3.      /*******************************************
  4.      *
  5.      *   amean(..
  6.      *
  7.      *   This calculates the mean measure
  8.      *   for a sizeXsize area.
  9.      *
  10.      *   Look at Levine's book page 451 for
  11.      *   the formula.
  12.      *   "Vision in Man and Machine" by
  13.      *   Martin D. Levine, McGraw Hill, 1985.
  14.      *
  15.      *******************************************/
  16.  
  17. amean(in_name, out_name, the_image, out_image,
  18.           il, ie, ll, le, size)
  19.    char   in_name[], out_name[];
  20.    int    il, ie, ll, le,
  21.           size;
  22.    short  the_image[ROWS][COLS],
  23.           out_image[ROWS][COLS];
  24. {
  25.    int      a, b, count, i, j, k, max,
  26.             sd2, sd2p1;
  27.    short    pixel;
  28.    struct   tiff_header_struct image_header;
  29.    unsigned long big;
  30.  
  31.    sd2   = size/2;
  32.    sd2p1 = sd2 + 1;
  33.  
  34.    create_file_if_needed(in_name, out_name, out_image);
  35.  
  36.    read_tiff_image(in_name, the_image, il, ie, ll, le);
  37.  
  38.    max = 255;
  39.    if(image_header.bits_per_pixel == 4){
  40.        max = 16;
  41.    }
  42.  
  43.       /**************************************
  44.       *
  45.       *   Calculate the gray level difference
  46.       *   array.
  47.       *
  48.       ***************************************/
  49.  
  50.    difference_array(the_image, out_image, size);
  51.    for(i=0; i<ROWS; i++)
  52.       for(j=0; j<COLS; j++)
  53.          the_image[i][j] = out_image[i][j];
  54.  
  55.       /**************************************
  56.       *
  57.       *   Loop over the image array and
  58.       *   calculate the mean measure.
  59.       *
  60.       ***************************************/
  61.  
  62.    printf("\n");
  63.    for(i=sd2; i<ROWS-sd2; i++){
  64.       if( (i%10) == 0) printf("%d ", i);
  65.       for(j=sd2; j<COLS-sd2; j++){
  66.  
  67.          pixel = 0;
  68.          for(a=-sd2; a<sd2p1; a++){
  69.             for(b=-sd2; b<sd2p1; b++){
  70.                pixel = pixel + the_image[i+a][j+b];
  71.             }
  72.          }
  73.       out_image[i][j] = pixel/(size*size);
  74.       if(out_image[i][j] > max)
  75.          out_image[i][j] = max;
  76.  
  77.       }  /* ends loop over j */
  78.    }  /* ends loop over i */
  79.  
  80.    fix_edges(out_image, sd2);
  81.  
  82.    write_array_into_tiff_image(out_name, out_image,
  83.                                il, ie, ll, le);
  84.  
  85. }  /* ends amean */
  86.